#!/usr/bin/wish
#______________________________________
# Fichier  : <+FICHIER+>
# Auteur   : <+MON_NOM+>
# Date     : <+DATE+>
# Fonction : <+FONCTION+>
#______________________________________


set isCO 0
set Socket 0

proc query {} {
   
   global Socket
   global isCO
   if { $isCO == 1 } {
       
        gets $Socket reponse
      	puts $reponse

   
} 
}

proc connexion {} {

global Socket
global isCO

set Socket [socket localhost 5000]
fconfigure $Socket -buffering line

puts "Client tcl"
puts "Indiquer votre user"
gets stdin userName
puts -nonewline $Socket $userName
flush $Socket

puts "Nouveau groupe? (y/n)"
gets stdin choix

while { $choix != "y" && $choix !="n" } {
	puts "Veuillez choisir entre (y/n)!:"
	gets stdin choix
}

if { $choix == "y" } {
	puts -nonewline $Socket "CREATE_GROUP"
	flush $Socket
	puts "Nom du groupe:"
	gets stdin groupName
	puts -nonewline $Socket $groupName
	flush $Socket
	gets $Socket response
	
	if { $response == "VALIDE_GROUP" } {
		puts "Le groupe a été créé!"
		set isCO 1
	} else {
		puts "Le groupe n'a pas été crée!"
	}
} else {


puts -nonewline $Socket "JOIN_GROUP"
        flush $Socket
        gets $Socket header
        puts $header
        gets $Socket nGroup
        puts -nonewline "Nombre de groupe: "
        puts $nGroup
        set i 0

        while { $i < $nGroup } {
                gets $Socket response
                puts $response
                incr i
        }

        puts "Nom du groupe:"
        gets stdin groupName
        puts -nonewline $Socket $groupName
        flush $Socket
        gets $Socket response

        if { $response eq "GROUP_NAME_INVALIDE" } {
                puts "Le nom du groupe est invalide!"
        } else {

                if { $response == "VALIDE_NAME" } {

                        #On attend récup les info du groupe ( Ne pas l'intégrer à la connexion d'un client, on mettra ce bout de code dans une fonction à part
                        gets $Socket infoGroup
                        puts $infoGroup

                        gets $Socket masterName
                        puts -nonewline "Chef de groupe: "
                        puts $masterName
			gets $Socket masterId
                        puts -nonewline "ID: "
                        puts $masterId

                        gets $Socket nUser

                        set j 0
                        while { $j < $nUser } {
                                puts -nonewline "Utilisateur: "
                                gets $Socket user
                                puts $user

                                puts -nonewline "ID: "
                                gets $Socket userId
                                puts $userId
                                incr j
                        }
                        puts "Vous êtes à présent en ligne!"
                } else {
                        puts "Le nom d'utilisateur est déjà choisi!"
                }
        }

}
}

proc deconnexion {} {

global isCO
global Socket

	if { $isCO == 1 } {
		puts $Socket "deconnexion"
		flush $Socket
		set isCO 0
		close $Socket
		puts "vous avez déconnectez" 
	} else {
		puts "Veuillez vous connecter! "
	}

}

proc writeServer {} {
global Socket
global isCO

if { $isCO == 1 } {
	puts "Your message for the server :"
	gets  response
	puts $Socket response
	flush $Socket
	tk_messageBox -icon info -message "Your message is delivery" -title "Message Server" -type ok

} else {
	tk_messageBox -icon error -message "Please, connect you before" -type ok -title "Error : No connected"

}
}

proc quit {} {

global isCO
global Socket

if { $isCO == 1 } {
	deconnexion {}
	close Socket

}
}

button .q -text "QUITTER" -relief raised -command exit
text .t
button .query -text "query" -relief raised -command query
button .connexion -text "connexion" -relief raised -command connexion
button .deconnexion -text "deconnexion" -relief raised -command deconnexion
button .writeserver -text "Write Message" -relief raised -command writeServer

entry .write -relief sunken -textvar uWrite

pack .q .t -fill x -padx 2m -pady 2m
pack .query .connexion .deconnexion .writeserver -side left  -padx 2m -pady 2m
pack .write -side left -padx 2m -pady 2m

